package com.sakura.probe.nosql.redis;

import com.sakura.probe.pojo.PersonInfo;

import java.util.Set;

/**
 * redis操作Service,
 * 对象和数组都以json形式进行存储
 */
public interface RedisService {
    /**
     * 存储数据
     */
    void set(String key, Object value);


    /**
     * 存储数据并设置超期时间
     */
    void set(String key, String value,long expire);

    /**
     * 存储list数据,如果不存在该键则自动创建
     */
    void setList(String key, String value);

    /**
     * 存储Set集合
     */
    void setSet(String key,String value);

    void setSet(String key,Set<String> set);

    /**
     * 模糊匹配查询相对应的key
     * @param key
     * @return
     */
    Set<String> keys(String key);

    /**
     * 获取数据
     */
    String get(Object key);

    /**
     * 获取list集合
     */
    Object getList(String key);



    /**
     * 获取set集合
     * @param key
     * @return
     */
    Set<String> getSet(String key);

    /**
     * 设置超期时间
     */
    boolean expire(String key, long expire);

    /**
     * 删除数据
     */
    void remove(String key);

    /**
     * 自增操作
     * @param delta 自增步长
     */
    Long increment(String key, long delta);

    /**
     * 自减操作
     */
    Long decrement(String key, long delta);

    /**
     * 判断key是否存在
     * @param key
     * @return
     */
    boolean exist(String key);

    /**
     * 加锁
     * @param key 需要加锁的key值
     * @param expire 加锁的时间
     * @return
     */
//    boolean lock(String key,long expire);
//
//    void unlock(String key,long)

    /**
     * 通过token获取用户的基本信息
     * @param token
     * @return
     */
    PersonInfo getPersonByToken(String token);
}
